home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_056 / icon2c / icon2c.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  9KB  |  379 lines

  1. /*  Icon2C.c  --- Write out an Icon as C data structures
  2.  *  Link with AStartup.obj ... LIBRARY Amiga.lib
  3.  */
  4.  
  5. #include <exec/types.h>
  6. #include <workbench/startup.h>
  7. #include <workbench/workbench.h>
  8. #include <libraries/dos.h>
  9. #include <libraries/dosextens.h>
  10.  
  11.  
  12. /* For stdio under WB */
  13. extern LONG stdin, stdout, stderr;  /* in Astartup.obj */
  14. #define INBUFSZ 40
  15. #define SBUFSZ  80
  16. char sbuf[SBUFSZ];
  17. char iname[INBUFSZ];
  18. char fname[INBUFSZ];
  19. char conSpec[] = "CON:0/40/640/140/ Icon2C ";
  20. BOOL fromWB, newStdio;
  21.  
  22. /* Other stuff */
  23. struct DiskObject *diskobj = NULL;
  24. LONG   IconBase = NULL;
  25. LONG   fh = NULL;
  26. int    wLen; 
  27.  
  28. char   line1[] =
  29.           "\nIcon2C - Writes Icon to file as C source structures\n\n";
  30. char   line2[] =
  31.           "   Notes: User should convert flag values to OR'd labels\n";
  32. char   line3[] =
  33.           "          Fields commented in [brackets] are not traced\n";
  34. char   line4[] =
  35.           "          User must supply these if value is non-zero\n\n";
  36.  
  37.  
  38. main(argc,argv)
  39. int  argc;
  40. char **argv;
  41.    {
  42.  
  43.    fromWB = (argc==0) ? TRUE : FALSE;
  44.    newStdio = FALSE;
  45.    if((fromWB) && (!(newStdio = openStdio(&conSpec[0]))))
  46.       {
  47.       return(0);
  48.       }
  49.  
  50.    if((IconBase = OpenLibrary("icon.library",0))==NULL)
  51.       {
  52.       cleanexit("Can't open icon.library\n");
  53.       }
  54.  
  55.    printf(line1);
  56.    printf(line2);
  57.    printf(line3);
  58.    printf(line4);
  59.    printf("Enter icon name without \".info\": ");
  60.    if(!(gets(&iname[0])))
  61.       cleanexit("\nNo icon name given, data not saved\n");
  62.  
  63.    if((diskobj = (struct DiskObject *)GetDiskObject(iname))==NULL)
  64.       {
  65.       cleanexit("\nCan't get icon - check path and spelling\n");
  66.       }
  67.  
  68.    printf("Enter filename for output: ");
  69.    if(!(gets(&fname[0])))
  70.       cleanexit("\nNo file name given, data not saved\n");
  71.  
  72.  
  73.    if(!(fh = Open(&fname[0],MODE_NEWFILE)))
  74.       cleanexit("\nCan't open output file\n");
  75.  
  76.    wLen = 1;   /* Init to non-error value */
  77.    writeData(fh,diskobj);
  78.    Close(fh);
  79.    cleanexit("\nDone\n");
  80.    }
  81.  
  82.  
  83. writeData(fh,obj)
  84. LONG fh;
  85. struct DiskObject *obj;
  86.    {
  87.    struct Image *img;
  88.    struct IntuiText *itext;
  89.  
  90.    if (img=(struct Image *)(obj->do_Gadget.GadgetRender))
  91.       {
  92.       writeImageData(fh,img,1);
  93.       writeImage(fh,img,1);
  94.       }
  95.    if (img=(struct Image *)(obj->do_Gadget.SelectRender))
  96.       {
  97.       writeImageData(fh,img,2);
  98.       writeImage(fh,img,2);
  99.       }
  100.    if (itext = (struct IntuiText *)(obj->do_Gadget.GadgetText))
  101.       {
  102.       writeItext(fh,itext);
  103.       }
  104.    writeDiskObj(fh,obj);
  105.    }
  106.  
  107.  
  108. writeImage(fh,img,n)
  109. LONG fh;
  110. struct Image *img;
  111. int n;
  112.    {
  113.    sprintf(&sbuf[0],"USHORT  image%ld[] = {\n",n);
  114.    myWrite(fh,&sbuf[0]);
  115.  
  116.    myDVarWrite(fh,(LONG)img->LeftEdge,"LeftEdge");
  117.    myDVarWrite(fh,(LONG)img->TopEdge,"TopEdge");
  118.    myDVarWrite(fh,(LONG)img->Width,"Width");
  119.    myDVarWrite(fh,(LONG)img->Height,"Height");
  120.    myDVarWrite(fh,(LONG)img->Depth,"Depth");
  121.    sprintf(&sbuf[0],
  122.               " (USHORT *)&imageData%ld,  /* ImageData */\n",n);
  123.    myWrite(fh,&sbuf[0]);
  124.    myXVarWrite(fh,(LONG)img->PlanePick,"PlanePick");
  125.    myXVarWrite(fh,(LONG)img->PlaneOnOff,"PlaneOnOff");
  126.    myDVarWrite(fh,(LONG)img->NextImage,"[NextImage]");
  127.    myWrite(fh," };\n\n");
  128.    }
  129.  
  130.  
  131. writeImageData(fh,img,n)
  132. LONG fh;
  133. struct Image *img;
  134. int n;
  135.    {
  136.    int w, h, d, wi, hi, di, sPerLine, k;
  137.    USHORT *data;
  138.  
  139.    w = (int)img->Width;
  140.    h = (int)img->Height;
  141.    d = (int)img->Depth;
  142.    data = (USHORT *)img->ImageData;
  143.  
  144.    /* Write out Image data array */
  145.    sprintf(&sbuf[0],"USHORT  imageData%ld[] = {\n",n);
  146.    myWrite(fh,&sbuf[0]);
  147.  
  148.    sPerLine = ((w - 1) >> 4) + 1;
  149.    for (di = 0; (di < d)&&(wLen>0); di++)
  150.       {
  151.       for (hi = 0; (hi < h)&&(wLen>0); hi ++)
  152.          {
  153.          for (wi = 0; (wi < sPerLine)&&(wLen>0); wi++, data++)
  154.             {
  155.             sprintf(&sbuf[0]," 0x%4lx,",(USHORT)(*data));
  156.             for (k=3; k<7; k++)
  157.                {
  158.                if (sbuf[k] == ' ')  sbuf[k] = '0';
  159.                }
  160.             myWrite(fh,&sbuf[0]);
  161.             }
  162.          myWrite(fh,"\n");
  163.          }
  164.       myWrite(fh,"/**/\n");
  165.       }
  166.    myWrite(fh," };\n\n");
  167.    }
  168.  
  169.  
  170. writeItext(fh,it)
  171. LONG fh;
  172. struct IntuiText *it;
  173.    {
  174.    /* Write out IntuiText structure */
  175.    myDVarWrite(fh,(LONG)it->FrontPen,"FrontPen");
  176.    myDVarWrite(fh,(LONG)it->BackPen,"BackPen");
  177.    myXVarWrite(fh,(LONG)it->DrawMode,"DrawMode");
  178.    myDVarWrite(fh,(LONG)it->LeftEdge,"LeftEdge");
  179.    myDVarWrite(fh,(LONG)it->TopEdge,"TopEdge");
  180.  
  181.    myXVarWrite(fh,(LONG)it->ITextFont,"[ITextFont]");
  182.    if(it->IText)
  183.       {
  184.       sprintf(&sbuf[0]," \"%s\",  /* IText */\n",it->IText);
  185.       myWrite(fh,&sbuf[0]);
  186.       }
  187.    else
  188.       {
  189.       myWrite(fh," NULL,  /*IText */\n");
  190.       }
  191.    myXVarWrite(fh,(LONG)it->NextText,"[NextText]");
  192.    }
  193.  
  194.  
  195. writeDiskObj(fh,obj)
  196. LONG fh;
  197. struct DiskObject *obj;
  198.    {
  199.    /* Write out DiskObject/Gadget structure */
  200.    myWrite(fh,"struct DiskObject diskObject = {\n");
  201.    myWrite(fh," WB_DISKMAGIC,   /* do_Magic */\n");
  202.    myWrite(fh," WB_DISKVERSION, /* do_Version */\n\n");
  203.    myWrite(fh,"/* Embedded Gadget Structure */\n");
  204.    myDVarWrite(fh,(LONG)obj->do_Gadget.NextGadget,"[NextGadget]");
  205.    myDVarWrite(fh,(LONG)obj->do_Gadget.LeftEdge,"LeftEdge");
  206.    myDVarWrite(fh,(LONG)obj->do_Gadget.TopEdge,"TopEdge");
  207.    myDVarWrite(fh,(LONG)obj->do_Gadget.Width,"Width");
  208.    myDVarWrite(fh,(LONG)obj->do_Gadget.Height,"Height");
  209.    myXVarWrite(fh,(LONG)obj->do_Gadget.Flags,"Flags");
  210.    myXVarWrite(fh,(LONG)obj->do_Gadget.Activation,"Activation");
  211.    myXVarWrite(fh,(LONG)obj->do_Gadget.GadgetType,"GadgetType");
  212.  
  213.    if(obj->do_Gadget.GadgetRender)
  214.       myWrite(fh," (APTR)&image1, /* GadgetRender */\n");
  215.    else
  216.       myWrite(fh," NULL,     /* GadgetRender */\n");
  217.  
  218.    if(obj->do_Gadget.SelectRender)
  219.       myWrite(fh," (APTR)&image2, /* SelectRender */\n");
  220.    else
  221.       myWrite(fh," NULL,     /* SelectRender */\n");
  222.  
  223.    if(obj->do_Gadget.GadgetText)
  224.       myWrite(fh," &gadgetText, /* GadgetText */\n");
  225.    else
  226.       myWrite(fh," NULL,     /* GadgetText */\n");
  227.  
  228.    myXVarWrite(fh,(LONG)obj->do_Gadget.MutualExclude,"MutualExclude");
  229.    myXVarWrite(fh,(LONG)obj->do_Gadget.SpecialInfo,"[SpecialInfo]");
  230.    myDVarWrite(fh,(LONG)obj->do_Gadget.GadgetID,"GadgetID");
  231.    myXVarWrite(fh,(LONG)obj->do_Gadget.UserData,"[UserData]");
  232.  
  233.    myWrite(fh,"\n/* Rest of DiskObject structure */\n");
  234.    myXVarWrite(fh,(LONG)obj->do_Type,"do_Type");
  235.    if(obj->do_DefaultTool)
  236.       {
  237.       sprintf(&sbuf[0]," \"%s\",   /* do_Default Tool */\n",
  238.                  obj->do_DefaultTool);
  239.       myWrite(fh,&sbuf[0]);
  240.       }
  241.    else
  242.       {
  243.       myWrite(fh," NULL,   /* do_DefaultTool */\n");
  244.       }
  245.    myXVarWrite(fh,(LONG)obj->do_ToolTypes,"[do_ToolTypes]");
  246.    myXVarWrite(fh,(LONG)obj->do_CurrentX,"do_CurrentX");
  247.    myXVarWrite(fh,(LONG)obj->do_CurrentY,"do_CurrentY");
  248.    myXVarWrite(fh,(LONG)obj->do_DrawerData,"[do_DrawerData]");
  249.    myXVarWrite(fh,(LONG)obj->do_ToolWindow,"[do_ToolWindow]");
  250.    myXVarWrite(fh,(LONG)obj->do_StackSize,"do_StackSize");
  251.    myWrite(fh," };\n\n");
  252.    }
  253.  
  254.  
  255. myDVarWrite(f,var,s)
  256. LONG f,var;
  257. char *s;
  258.    {
  259.    sprintf(&sbuf[0]," %ld,  /* %s */\n",var,s);
  260.    myWrite(f,&sbuf[0]);
  261.    }
  262.  
  263. myXVarWrite(f,var,s)
  264. LONG f,var;
  265. char *s;
  266.    {
  267.    sprintf(&sbuf[0]," 0x%lx,  /* %s */\n",var,s);
  268.    myWrite(f,&sbuf[0]);
  269.    }
  270.  
  271.  
  272. myWrite(f,s)
  273. LONG f;
  274. char *s;
  275.    {
  276.    if (wLen > 0)
  277.       {
  278.       wLen = Write(f,s,strlen(s));
  279.       return(wLen);
  280.       }
  281.    else cleanexit("\nError writing output file\n");
  282.    }
  283.  
  284.  
  285. cleanexit(s)
  286. char *s;
  287.    {
  288.    if (diskobj)  FreeDiskObject(diskobj);
  289.    if (IconBase) CloseLibrary(IconBase);
  290.  
  291.    if (*s) printf(s);
  292.    if ((*s)&&(fromWB))
  293.       {
  294.       printf("\nPRESS RETURN TO EXIT\n");
  295.       while(getchar() != '\n');
  296.       }
  297.  
  298.    if (newStdio) closeStdio();
  299.    exit(0);
  300.    }
  301.  
  302.  
  303.  
  304. openStdio(conspec)
  305. char *conspec;
  306.    {
  307.    LONG wfile;
  308.    struct Process *proc;
  309.    struct FileHandle *handle;
  310.  
  311.    if (!(wfile = Open(conspec,MODE_NEWFILE)))  return(0);
  312.    stdin  = wfile;
  313.    stdout = wfile;
  314.    stderr = wfile;
  315.    handle = (struct FileHandle *)(wfile << 2);
  316.    proc = (struct Process *)FindTask(NULL);
  317.    proc->pr_ConsoleTask = (APTR)(handle->fh_Type);
  318.    proc->pr_CIS = (BPTR)stdin;
  319.    proc->pr_COS = (BPTR)stdout;
  320.    return(1);
  321.    }
  322.  
  323. closeStdio()
  324.    {
  325.    struct Process *proc;
  326.    struct FileHandle *handle;
  327.  
  328.    if (stdin > 0)  Close(stdin);
  329.    stdin  = -1;
  330.    stdout = -1;
  331.    stderr = -1;
  332.    handle = (struct FileHandle *)(stdin << 2);
  333.    proc = (struct Process *)FindTask(NULL);
  334.    proc->pr_ConsoleTask = NULL;
  335.    proc->pr_CIS = NULL;
  336.    proc->pr_COS = NULL;
  337.    }
  338.  
  339.  
  340. gets(s)
  341. char *s;
  342.    {
  343.    int l = 0, max = INBUFSZ - 1;
  344.  
  345.    while (((*s = getchar()) !='\n' )&&(l < max)) s++, l++;
  346.    *s = NULL;
  347.    return(l);
  348.    }
  349.  
  350.  
  351.  
  352.  
  353. /* String Functions */
  354.  
  355. strlen(s)
  356. char *s;
  357.    {
  358.    int i = 0;
  359.    while(*s++) i++;
  360.    return(i);
  361.    }
  362.  
  363. strcpy(to,from)
  364. char *to, *from;
  365.    {
  366.    do
  367.       {
  368.       *to++ = *from;
  369.       }
  370.    while(*from++);
  371.    }
  372.  
  373. strcat(to,from)
  374. char *to, *from;
  375.    {
  376.    while(*to) to++;
  377.    strcpy(to,from);
  378.    }
  379.